package com.efeichong.oss;

import lombok.NonNull;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Nullable;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipOutputStream;

/**
 * @author lxk
 * @date 2024/11/16
 */
public interface OssService {
     /**
     * 文件上传
     *
     * @param file       文件
     * @param bucketName 指定空间 本地指定根目录，云服务指定存储桶
     * @param folderName 文件路径
     * @return
     */
    String upload(@Nullable MultipartFile file, @Nullable String bucketName, @Nullable String folderName, @NonNull String suffix);

      /**
     * 文件上传
     *
     * @param files      文件
     * @param bucketName 指定空间 本地指定根目录，云服务指定存储桶
     * @param folderName 文件路径
     * @return
     */
    List<String> upload(@Nullable MultipartFile[] files, @Nullable String bucketName, @Nullable String folderName, @NonNull String suffix);

     /**
     * 文件上传
     *
     * @param bytes      文件字节数组
     * @param folderName 文件路径
     * @param suffix     文件后缀
     * @return
     */
    String upload(@Nullable byte[] bytes, @Nullable String bucketName, @Nullable String folderName, @NonNull String suffix);

     /**
     * 获取临时授权的地址
     *
     * @param bucketName 指定空间
     * @param folderName 文件路径
     * @return
     */
    UploadUrl getUploadUrl(@Nullable String bucketName, @Nullable String folderName, @Nullable String suffix);

     /**
     * 获取临时授权的地址
     *
     * @param bucketName 指定空间
     * @param folderName 文件路径
     * @return
     */
    List<UploadUrl> getUploadUrls(@Nullable String bucketName, @Nullable String folderName, @Nullable String suffix, @Nullable Integer num);

     /**
     * 下载文件
     *
     * @param url 文件地址
     */
    byte[] download(@Nullable String url);

      /**
     * 批量下载
     *
     * @param outputStream
     * @param urls         文件地址
     */
    ZipOutputStream batchDownload(@Nullable OutputStream outputStream, @Nullable List<String> urls);

    /**
     * 删除
     *
     * @param url 文件地址
     */
    void delete(@Nullable String url);

    /**
     * 批量删除
     *
     * @param urls 文件地址
     */
    void batchDelete(@Nullable List<String> urls);
}
